package com.cskaoyan.javase.string._4api;

/**
 * @description: String类API的使用
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

import java.io.UnsupportedEncodingException;
import java.util.Arrays;

/**
 * > String是开发中最常见的需要操作的对象，没有之一
 * > String天天见，所以我们要对String的操作至少有个脸熟，大概知道String类能做什么
 * > 以下方法不要求都背住，但是应该能够了解有这 些方法，并可以在实际开发中随着使用而熟记
 *
 */
public class Demo {
    public static void main(String[] args) throws UnsupportedEncodingException {
        //1.判断功能
        //用来比较字符串的内容，注意区分大小写
        //boolean equals(Object obj)
        String s1 = "abc";
        String s2 = "Abc";
        System.out.println(s1.equals(s2));

        ////忽略字符串大小写比较字符串内容，常见用于比较网址URL
        //boolean equalsIgnoreCase(String str)
        System.out.println(s1.equalsIgnoreCase(s2));

        //判断当前字符串对象是否包含，目标字符串的字符序列，常见用于确定是否有盗链行为
        //boolean contains(String str)
        //判断当前字符串对象，是否已目标字符串的字符序列开头
        //boolean startsWith(String str)
        //判断当前字符串，是否以目标字符串对象的字符序列结尾，常用于确定文件后缀名格式
        /**
         * 思考:
         *      一个文件/文件夹以.txt结尾,那么它就是一个文本文件吗?
         *      一个文件/文件夹没有后缀名,那么就可以判断是文件夹吗?
         *      后缀名能够用来判断文件/文件夹吗?
         *
         *      都是不是,是否有后缀不能用于判断文件/文件夹
         */
        //boolean endsWith(String str)
        //判断一个字符串，是不是空字符串
        //boolean isEmpty()
        System.out.println(s1.isEmpty());

        //2.获取功能
        // 获取当前字符串对象中，包含的字符个数
        //int length()
        String s3 = "hello";
        System.out.println(s3.length());

        //获取字符串对象代表字符序列中，指定位置的字符
        //char charAt(int index)
        //该方法是一个非常重要的方法,常用于将String 转换成 char类型基本数据类型
        String s4 = "爱";
        char c = s4.charAt(0);
        System.out.println(c);

        //在当前字符串对象中查找指定的字符，如果找到就返回字符，首次出现的位置，如果没找到返回-1
        //也可以填字符
        //该方法用于在字符串中查找元素,并返回它的下标(找得到的话)
        //int indexOf(int ch)
        //指定从当前字符串对象的指定位置开始，查找首次出现的指定字符的位置，(如果没找到返回-1)
        //可以填入字符
        //在java JDK源码当中,关于数组操作的方法中如果出现区间,那么这个区间一定是左闭右开的
        //int indexOf(int ch,int fromIndex)
        String s5 = "abcda";
        System.out.println(s5.indexOf(1000));
        System.out.println(s5.indexOf(97, 4));


        //查找当前字符串中，目标字符串首次出现的位置(如果包含)，找不到，返回-1
        //这里的位置是指目标字符串的第一个字符,在当前字符串对象中的位置
        //int indexOf(String str)

        //指定，从当前字符串对象的指定位置开始,查找首次出现的指定字符串的位置(如果没找到返回-1)
        //这里的位置是指目标字符串的第一个字符,在当前字符串对象中的位置
        //int indexOf(String str,int fromIndex)
        System.out.println(s5.indexOf("a", 3));


        //截取字符串
        //返回字符串，该字符串只包含当前字符串中，从指定位置开始(包含指定位置字符)到结束的那部分字符串
        //String substring(int start)
        //返回字符串，只包含当前字符串中，从start位置开始(包含)，到end(不包含)指定的位置的字符串
        //String substring(int start,int end)
        String s6 = "我喜欢谁呢?";
        System.out.println(s6.substring(1));
        System.out.println(s6.substring(1, 3));

        //3.String类的转换功能
        //获取一个用来表示字符串对象字符序列的，字节数组
        //byte[] getBytes()
        String s7 = "我爱你";
        byte[] bytes = s7.getBytes();
        System.out.println(Arrays.toString(bytes));
        //使用指定字符集，将字符编码成字节序列，并将结果存储到一个新的 byte 数组中
        //getBytes(String charsetName)
        byte[] b1 = s7.getBytes("UTF-8");
        byte[] b2 = s7.getBytes("GBK");
        System.out.println(Arrays.toString(b1));
        System.out.println(Arrays.toString(b2));


        ////获取的是用来表示字符串对象字符序列的，字符数组
        //char[] toCharArray()
        //该方法不是value数组的方法
        char[] chars = s7.toCharArray();
        System.out.println(Arrays.toString(chars));


        //将字符从此字符串复制到目标字符数组
        //getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
        //作用是将字符串中的字符,复制到目标char数组中
        char[] target = new char[10];
        String s8 = "hello world";
        //src = source源头的意思,表示字符串当中要截取内容的开始和结果(区间是左闭右开)
        //dst = destination目的地的意思,
        //char数组就是我们要复制元素的地方,它是目的地,dstBegin是char数组从哪个下标开始赋值元素(左闭)
        //除此之外,还有aim,target等等命名都是可以使用的
        s8.getChars(0, 5, target, 2);
        System.out.println(Arrays.toString(target));


        //把字符数组转换成字符串
        //static String valueOf(char[] chs)
        //把各种基本数据类型和对象转换成字符串
        //static String valueOf(int i/double...)
        Demo d = new Demo();
        String s = String.valueOf(d);
        System.out.println(s);


        ////把字符串全部转化为小写
        //String toLowerCase()
        ////把字符串全部转换为大写
        //String toUpperCase()
        String s9 = "wwW.BaiDu.Com";
        System.out.println(s9.toLowerCase());

        //字符串拼接，作用等价于 + 实现的字符串拼接
        //String concat(String str)

        //4,替换功能
        //在新的字符串中，用新(new)字符，替换旧(old)字符
        //String replace(char old,char new)
        String s10 = "halla";
        String replace = s10.replace('a', 'o');
        System.out.println(replace);

        //在新的字符串中，用新的字符串(new), 替换旧(old)字符串
        //String replace(String old,String new)
        String s11 = "heelp";
        System.out.println(s11.replace("hee", "abc"));
        //replace替换功能最常用的就是replaceAll,用正则表达式完全字符串的操作
        //replace非常重要的作用是用来去掉字符串的空格
        String s12 = "ada asdadasdas sada  s";
        System.out.println(s12.replaceAll(" ", ""));

        //在新的字符串中，去掉开头和结尾的空格字符
        //String trim()
        String s13 = " ab  c   ";
        System.out.println(s13.trim());

    }
}
